package reflect.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * java提供的一些注解：
 * @Target()注解，用于标注我们定义的注解可以被应用在哪些位置
 *          具体的位置有ElementType定义，常见的位置:
 *             ElementType.TYPE:当前注解可以被应用在类上,接口上
 *             ElementType.METHOD:当前注解可以被应用在方法上
 *             ElementType.CONSTRUCTOR:当前注解可以被应用在构造器上
 *             ElementType.FIELD:当前注解可以被应用在属性上
 *
 *  @Retention注解,指定我们定义的注解的保留级别
 *         有三个可选值:
 *         RetentionPolicy.SOURCE:注解仅保留在源代码中,编译成字节码文件后就舍弃了
 *         RetentionPolicy.CLASS:保留在字节码文件中,但是JVM加载该类到JVM内部后被舍弃(默认值)
 *         RetentionPolicy.RUNTIME:保留在运行时,JVM加载该类后依然保留,可被反射机制访问
 */
@Target(ElementType.TYPE)// 表示这个注解只能用于类上
//@Target({ElementType.TYPE,ElementType.FIELD,ElementType.METHOD})// 表示这个注解只能用于类上
@Retention(RetentionPolicy.RUNTIME)// 表示这个注解在运行时保留(想在反射机制中使用，必须是RUNTIME)
public @interface AutoRunClass {
}
